#ifndef SERVERMODELOPROTOCOLO_H_
#define SERVERMODELOPROTOCOLO_H_
#include <string>
#include <string.h>
#include <iostream>
#include "commonConfig.h"


class ModeloProtocolo {
private:
	char codigo;
	unsigned int longitudArgumento;
	char* argumento;

	/* Extrae un campo de la operacion. */
	void extraerCampo(std::string& operacion, std::string& campoProtocolo);

public:
	ModeloProtocolo();

	virtual ~ModeloProtocolo();

	/* Dado un string que representa una operacion, modela al protocolo
	 * separando del string los campos correspondientes. */
	void stringToProtocolo(std::string& operacion);

	char *getArgumento() const;
    char getCodigo() const;
    unsigned int getLongitudArgumento() const;
    void setArgumento(char *argumento);
    void setCodigo(char codigo);
    void setLongitudArgumento(unsigned int longitudArgumento);

    /* Dados un header con datos iniciales y un buffer
     * que contiene los argumentos.*/
    void hidratar(char* datosIniciales, char* argumentos);

    /* Retorna un buffer que contiene el codigo de la operacion,
     * el tamanio del argumento y el argumento. */
    char* serializar();
};

#endif /* SERVERMODELOPROTOCOLO_H_ */
